/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Source;

import Interfaz.InfoArchivo;
import java.io.*;
import java.util.ArrayList;

import org.w3c.dom.*;

import javax.xml.parsers.*;

import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;

/**
 *
 * @author Nicolas Caceres
 */
public class GuardarEstadoNodoXML {

    /**
     * constructor de la clase 
     */
    public GuardarEstadoNodoXML()
    {
        
    }


    /**
     * Guarda el estado del nodo
     */
    public void escribirXML(String peerName, ArrayList<InfoArchivo> listaCompartidos, ArrayList<InfoArchivo> listaDescargados )
    {
        try{

	  DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
	  DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

	  //root elements
	  Document doc = docBuilder.newDocument();
	  Element rootElement = doc.createElement(peerName);
	  doc.appendChild(rootElement);


	  //Compartidos elements
	  Element compartidos = doc.createElement("Archivos_Compartidos");
	  rootElement.appendChild(compartidos);
        
            for (int i = 0; i < listaCompartidos.size(); i++) {

                InfoArchivo arch = listaCompartidos.get(i);
                System.out.println(arch.getNombreArchivo());
                Element nombreArchivo = doc.createElement(arch.getNombreArchivo());  //nombreArchivo
                nombreArchivo.appendChild(doc.createTextNode(arch.getPalabraClave1()+","+arch.getPalabraClave2()+","+arch.getPalabraClave3()));
                compartidos.appendChild(nombreArchivo);

            }

          //Descargados elements
	  Element descargados = doc.createElement("Archivos_Descargados");
	  rootElement.appendChild(descargados);

            for (int i = 0; i < listaDescargados.size(); i++) {
                InfoArchivo arch = listaDescargados.get(i);
                Element nombreArchivo = doc.createElement(arch.getNombreArchivo());  //nombreArchivo
                nombreArchivo.appendChild(doc.createTextNode(arch.getPalabraClave1()+","+arch.getPalabraClave2()+","+arch.getPalabraClave3()));
                descargados.appendChild(nombreArchivo);

            }

	  //write the content into xml file
	  TransformerFactory transformerFactory = TransformerFactory.newInstance();
	  Transformer transformer = transformerFactory.newTransformer();
	  DOMSource source = new DOMSource(doc);
	  StreamResult result =  new StreamResult(new File("../temp/estado.xml"));
	  transformer.transform(source, result);

	  System.out.println("Termino escribir XML");

     }catch(ParserConfigurationException pce){
	  pce.printStackTrace();
     }catch(TransformerException tfe){
	 tfe.printStackTrace();
     }
    }

    public static void main (String args[]) {
        new GuardarEstadoNodoXML();
    /*
    public void escribir(String peerName, ArrayList<InfoArchivo> listaCompartidos, ArrayList<InfoArchivo> listaDescargados )
    {
        try{

	  DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
	  DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

	  //root elements
	  Document doc = docBuilder.newDocument();
	  Element rootElement = doc.createElement(peerName);
	  doc.appendChild(rootElement);

	  //staff elements
	  Element staff = doc.createElement("Archivo");
	  rootElement.appendChild(staff);

	  //set attribute to staff element
	  Attr attr = doc.createAttribute("id");
	  attr.setValue("1");
	  staff.setAttributeNode(attr);

	  //shorten way
	  //staff.setAttribute("id", "1");

	  //firstname elements
	  Element firstname = doc.createElement("PalabraClave1");
	  firstname.appendChild(doc.createTextNode("yong"));
	  staff.appendChild(firstname);

	  //lastname elements
	  Element lastname = doc.createElement("PalabraClave2");
	  lastname.appendChild(doc.createTextNode("mook kim"));
	  staff.appendChild(lastname);

	  //nickname elements
	  Element nickname = doc.createElement("PalabraClave3");
	  nickname.appendChild(doc.createTextNode("mkyong"));
	  staff.appendChild(nickname);

	  //salary elements
	  Element salary = doc.createElement("salary");
	  salary.appendChild(doc.createTextNode("100000"));
	  staff.appendChild(salary);

	  //write the content into xml file
	  TransformerFactory transformerFactory = TransformerFactory.newInstance();
	  Transformer transformer = transformerFactory.newTransformer();
	  DOMSource source = new DOMSource(doc);
	  StreamResult result =  new StreamResult(new File("../temp/estado.xml"));
	  transformer.transform(source, result);

	  System.out.println("Done");

     }catch(ParserConfigurationException pce){
	  pce.printStackTrace();
     }catch(TransformerException tfe){
	 tfe.printStackTrace();
     }*/
    }

    /**
     * Escribe el estado del nodo en un archivo de texto
     * @param peerName
     * @param listaCompartidos
     * @param listaDescargados
     */
    void escribirTxt(int numEstado, String peerName, ArrayList<InfoArchivo> listaCompartidos, ArrayList<InfoArchivo> listaDescargados) {

        try{
    // Create file
    FileWriter fstream = new FileWriter("../temp/"+ peerName +"_"+numEstado+".txt");
        BufferedWriter out = new BufferedWriter(fstream);
    out.write("Nombre: "+ peerName);
    out.newLine();
    out.write("Compartidos: ");
    out.newLine();
            for (int i = 0; i < listaCompartidos.size(); i++) {
                InfoArchivo infoArchivo = listaCompartidos.get(i);
                out.write("Nombre Archivo: " + infoArchivo.getNombreArchivo());
                out.newLine();
                out.write("Palabras Clave: " + infoArchivo.getPalabraClave1()+","+infoArchivo.getPalabraClave2()+","+infoArchivo.getPalabraClave3());
                out.newLine();
                out.write("Fecha Creacion: " +infoArchivo.getFechaCreacion());
                out.newLine();

            }
     out.write("Descargados: ");
     out.newLine();
            for (int i = 0; i < listaDescargados.size(); i++) {
                InfoArchivo infoArchivo = listaDescargados.get(i);
                out.write("Nombre Archivo: " + infoArchivo.getNombreArchivo());
                out.newLine();
                out.write("Palabras Clave: " + infoArchivo.getPalabraClave1()+","+infoArchivo.getPalabraClave2()+","+infoArchivo.getPalabraClave3());
                out.newLine();
                out.write("Fecha Descarga: " +infoArchivo.getFechaDescargado());
                out.newLine();

            }
    //Close the output stream
    out.close();
    }catch (Exception e){//Catch exception if any
      System.err.println("Error: " + e.getMessage());
    }
        
    }

    void escribirTxt2(int numEstado, String peerName, ArrayList<InfoArchivo> listaCompartidos, ArrayList<InfoArchivo> listaDescargados, InfoArchivo archivo) {

        try{
    // Create file
    FileWriter fstream = new FileWriter("../temp/"+ peerName +"_"+numEstado+".txt");
        BufferedWriter out = new BufferedWriter(fstream);
    out.write("Nombre: "+ peerName);
    out.newLine();
    out.write("Compartidos: ");
    out.newLine();
            for (int i = 0; i < listaCompartidos.size(); i++) {
                InfoArchivo infoArchivo = listaCompartidos.get(i);
                out.write("Nombre Archivo: " + infoArchivo.getNombreArchivo());
                out.newLine();
                out.write("Palabras Clave: " + infoArchivo.getPalabraClave1()+","+infoArchivo.getPalabraClave2()+","+infoArchivo.getPalabraClave3());
                out.newLine();
                out.write("Fecha Creacion: " +infoArchivo.getFechaCreacion());
                out.newLine();

            }
     out.write("Descargados: ");
     out.newLine();
            for (int i = 0; i < listaDescargados.size(); i++) {
                InfoArchivo infoArchivo = listaDescargados.get(i);
                out.write("Nombre Archivo: " + infoArchivo.getNombreArchivo());
                out.newLine();
                out.write("Palabras Clave: " + infoArchivo.getPalabraClave1()+","+infoArchivo.getPalabraClave2()+","+infoArchivo.getPalabraClave3());
                out.newLine();
                out.write("Fecha Descarga: " +infoArchivo.getFechaDescargado());
                out.newLine();

            }
     out.write("Archivo Abierto: " + archivo.nombreArchivo);
     out.newLine();
     out.write("Fecha Creacion: " + archivo.fechaCreacion);
     out.newLine();
     out.write("Archivo tamano: " + archivo.tamArchivo);
     out.newLine();
     out.write("Archivo ruta: " + archivo.rutaArchivo);
     out.newLine();
     out.write("FIN: ");
     out.newLine();
    //Close the output stream
    out.close();
    }catch (Exception e){//Catch exception if any
      System.err.println("Error: " + e.getMessage());
    }
    }

}
